"""
分段的胎位调度算法集成模块
将原有rules_schedule.py中的核心类和方法进行封装，便于Django调用。
"""
import sys
import os
from typing import List, Dict, Any, Optional
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../分段的胎位调度算法')))

from .rules_schedule import SchedulingSystem, Segment, MoldPosition

# 算法统一调用接口

def run_scheduling_algorithm(
    segments_data: List[Dict[str, Any]],
    mold_positions_data: List[Dict[str, Any]],
    rule: Optional[str] = None
) -> List[Dict[str, Any]]:
    """
    调用分段的胎位调度算法
    :param segments_data: 分段参数列表（每个元素为dict）
    :param mold_positions_data: 胎位参数列表（每个元素为dict）
    :param rule: 可选，调度规则
    :return: 调度结果列表（每个元素为dict，便于前端展示）
    """
    # 构建分段对象列表
    segments: List[Segment] = [Segment(i, **seg) for i, seg in enumerate(segments_data)]
    mold_positions: List[MoldPosition] = [MoldPosition(**mp) for mp in mold_positions_data]
    
    # 创建调度系统对象
    system: SchedulingSystem = SchedulingSystem(segments, mold_positions)
    if rule:
        system.schedule_segments(rule)
    else:
        system.schedule_segments()

    # 组织调度结果，返回给Django视图
    result: List[Dict[str, Any]] = []
    for segment in system.scheduled_segments:
        result.append({
            'segment_id': getattr(segment, 'id', None),  # 分段ID
            'block_number': getattr(segment, 'block_number', None),  # 分段号
            'mold_position': getattr(segment.mold_position, 'description', None) if segment.mold_position else None,  # 胎位描述
            'scheduled_start': str(getattr(segment, 'scheduled_start', '')),  # 计划开始时间
            'scheduled_finish': str(getattr(segment, 'scheduled_finish', '')),  # 计划结束时间
            'delay': getattr(segment, 'delay', 0),  # 延期天数
            'ship_number': getattr(segment, 'ship_number', None),  # 船号
        })
    return result 